using System;

namespace ECCIT.Utilities
{
	public sealed class Converter
	{
		/// <summary>
		/// 	将对象转换成decimal值
		/// </summary>
		/// <returns>
		/// 	如果obj为合法decimal值，则返回转换成decimal的obj数值
		/// 	如果obj为null或者DBNull.Value，则返回defaultValue
		/// 	如果obj不为null，且不是合法decimal值，则返回null
		/// </returns>
		/// <param name='obj'>
		/// 	需要转换成decimal数值的对象
		/// </param>
		/// <param name='defaultValue'>
		/// 	默认值，如果obj为null或者DBNull.Value，则返回该默认值
		/// </param>
		public static decimal? SafeToDecimal (object obj, decimal defaultValue)
		{
			if (obj == null || obj == DBNull.Value)
				return  defaultValue;

			decimal parsed;
			bool result = decimal.TryParse(obj.ToString(), out parsed);
			if (result)
				return parsed;
			else
				return null;
		}

		/// <summary>
		/// 	将对象转换成int值
		/// </summary>
		/// <returns>
		/// 	如果obj为合法int值，则返回转换成int的obj数值
		/// 	如果obj为null或者DBNull.Value，则返回defaultValue
		/// 	如果obj不为null，且不是合法int值，则返回null
		/// </returns>
		/// <param name='obj'>
		/// 	需要转换成int数值的对象
		/// </param>
		/// <param name='defaultValue'>
		/// 	默认值，如果obj为null或者DBNull.Value，则返回该默认值
		/// </param>
		public static int? SafeToInt32(object obj, int defaultValue)
		{
			if (obj == null || obj == DBNull.Value)
				return  defaultValue;

			int parsed;
			bool result = int.TryParse(obj.ToString(), out parsed);
			if (result)
				return parsed;
			else
				return null;
		}
	}
}

